﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;
using System.Collections;

//Autor: Arturo Serna

namespace eCampus
{
    /// <summary>
    /// Formulario Principal Profesosor
    /// </summary>
    public partial class FormPrincipalProfesor : Form
    {
        #region variables
        /// <summary>
        /// variables
        /// </summary>
        string usuario,asignatura;
        FormPadreProfesor padre;
        #endregion

        #region constructor
        /// <summary>
        /// Constructor del formulario
        /// </summary>
        /// <param name="us">Usuario que lo ejecuta</param>
        public FormPrincipalProfesor(FormPadreProfesor formularioPadre,string usu, string asig)
        {
            usuario = usu;
            asignatura = asig;
            padre = formularioPadre;

            InitializeComponent();

            tbAsignatura.Text = padre.GetAsignatura();

            PintaDataGridMensajes();
            PintaDataGridNoticias();
            PintaDataGridEventos();
            CuadroResumen();
        }
#endregion

        #region CargaAsignaturas
        /// <summary>
        /// Obtiene un arraylist con los códigos de las asignaturas del profesor
        /// </summary>
        /// <returns></returns>
        public ArrayList CargaAsignaturas()
        {

            ArrayList listaAsignaturas = new ENAsignatura().ConsultaAsignaturasProfesor(usuario);
            ArrayList res = new ArrayList();
            try
            {

                if (listaAsignaturas.Count == 0)
                {
                    throw new Exception("Error. Este profesor no tiene asignaturas.");
                }
                foreach (ENAsignatura asi in listaAsignaturas)
                {
                    res.Add(asi.Codigo);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.StackTrace + "\r\n" + e.Message);
            }

            return res;
        }
        #endregion

        #region dibuja datagrids

        /// <summary>
        /// Pinta el cuadro resumen
        /// </summary>
        private void CuadroResumen()
        {

            ENMensaje mens = new ENMensaje(usuario);

            string[] a = new string[2];
            a[1] = "";

            dgResumen.Rows.Add();
            dgResumen.Rows.Add();

            a[0] = "Mensajes no leídos";
            a[1] = mens.NumRecibidosNoLeidos().ToString();
            dgResumen.Rows.Add(a);

            dgResumen.Rows.Add();

            a[0] = "Mensajes recibidos";
            a[1] = mens.NumRecibidos().ToString();
            dgResumen.Rows.Add(a);

            dgResumen.Rows.Add();

            a[0] = "Mensajes totales";
            a[1] = mens.NumMensajesTotales().ToString();
            dgResumen.Rows.Add(a);

            dgResumen.Rows.Add();
            dgResumen.Rows.Add();

            a[0] = "Noticias publicadas";
            a[1] = dgNoticias.Rows.Count.ToString();
            dgResumen.Rows.Add(a);

            dgResumen.Rows.Add();

            a[0] = "Eventos publicados";
            a[1] = dgEventos.Rows.Count.ToString();
            dgResumen.Rows.Add(a);

            dgResumen.Rows.Add();
            dgResumen.Rows.Add();

            a[0] = "Número de asignaturas";
            a[1] = padre.getNumAsigs().ToString();
            dgResumen.Rows.Add(a);

            dgResumen.Rows.Add();
        }

        private void PintaDataGridEventos()
        {
            dgEventos.DataSource = new ENEventoAsignatura(usuario, asignatura).ConsultaEventos(CargaAsignaturas());

            dgEventos.Columns["eveAsigId"].Visible = false;
            dgEventos.Columns["eveAsigCorreo"].Visible = false;
            dgEventos.Columns["eveAsigDate"].Visible = false;
            dgEventos.Columns["eveAsigTexto"].Visible = false;
            dgEventos.Columns["eveAsigAsunto"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgEventos.Columns["eveAsigCodigo"].HeaderText = "Asignatura";
            dgEventos.Columns["eveAsigAsunto"].HeaderText = "Asunto";
            dgEventos.Columns["eveAsigF_ini"].HeaderText = "Inicio";
            dgEventos.Columns["eveAsigF_fin"].HeaderText = "Fin";
            dgEventos.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;
            
        }

        private void PintaDataGridMensajes()
        {
            dgMensajes.DataSource = new ENMensaje(usuario).BandejaEntrada();
            dgMensajes.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;
            dgMensajes.Columns["menId"].Visible = false;
            dgMensajes.Columns["menReceptor"].Visible = false;
            dgMensajes.Columns["menMensaje"].Visible = false;
            dgMensajes.Columns["menArchivo"].Visible = false;
            dgMensajes.Columns["menPuntuacion"].Visible = false;
            dgMensajes.Columns["menLeido"].Visible = false;
            dgMensajes.Columns["menPropietario"].Visible = false;
            dgMensajes.Columns["menDate"].HeaderText = "Fecha";
            dgMensajes.Columns["menAsunto"].HeaderText = "Asunto";
            dgMensajes.Columns["menEmisor"].HeaderText = "Enviado por";
            dgMensajes.Columns["menAsunto"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;        
        }

        private void PintaDataGridNoticias()
        {
            dgNoticias.DataSource = new ENNoticias().dimeNoticiasSegunProfesor(usuario);
            
            dgNoticias.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;
            dgNoticias.Columns["notId"].Visible = false;
            dgNoticias.Columns["notFechaCreacion"].HeaderText = "Fecha";
            dgNoticias.Columns["notAsunto"].HeaderText = "Asunto";
            dgNoticias.Columns["notEmisor"].Visible = false;
            dgNoticias.Columns["notReceptor"].HeaderText = "Asignatura";
            dgNoticias.Columns["notMensaje"].Visible = false;
            dgNoticias.Columns["notArchivo"].Visible = false;
            dgNoticias.Columns["notVisibilidad"].Visible = false;
            dgNoticias.Columns["notAsunto"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

            dgNoticias.Columns["notReceptor"].DisplayIndex = 0;
            dgNoticias.Columns["notFechaCreacion"].DisplayIndex = 1;
            dgNoticias.Columns["notAsunto"].DisplayIndex = 2;
            
        }

        #endregion

        #region formateo de celdas

        /// <summary>
        /// Pinta de blanco las filas con datos del cuadro resumen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgResumen_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

            if (e.Value != null)
            {
                e.CellStyle.BackColor = Color.White;
            }
            else
            {
                e.CellStyle.BackColor = System.Drawing.SystemColors.Control;
            }            
        }

        /// <summary>
        /// Pinta en negrita las filas con mensajes no leídos en el datagrid mensajes
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgMensajes_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.Value != null)
            {
                if (dgMensajes["menLeido", e.RowIndex].Value.ToString() == "0")
                {
                    e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Bold);
                }
            }
        }

        #endregion

        #region botones

        private void button1_Click_1(object sender, EventArgs e)
        {
            FormPerfil p = new FormPerfil(usuario);
            p.ShowDialog();
            p.Dispose();
        }

        private void button8_Click(object sender, EventArgs e)
        {
            padre.btBuscar_Click(null, null);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            padre.btNoticias_Click(null, null);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            padre.btMensajes_Click(null, null);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            padre.btEventos_Click(null, null);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            padre.btMateriales_Click(null, null);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            padre.btBibliografia_Click(null, null);
        }

        private void button7_Click(object sender, EventArgs e)
        {

            padre.btEvaluacion_Click(null, null);
        }

        private void dgMensajes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                padre.btMensajes_Click(null, null);
            }
        }

        private void dgNoticias_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                padre.btNoticias_Click(null, null);
            }
        }

        private void dgEventos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                padre.btEventos_Click(null, null);
            }
        }

        #endregion

        #region inhabilita selección en datagrids

        private void dgResumen_SelectionChanged(object sender, EventArgs e)
        {
            dgResumen.ClearSelection();
        }
        private void dgNoticias_SelectionChanged(object sender, EventArgs e)
        {
            dgNoticias.ClearSelection();
        }
        private void dgEventos_SelectionChanged(object sender, EventArgs e)
        {
            dgEventos.ClearSelection();
        }
        private void dgMensajes_SelectionChanged(object sender, EventArgs e)
        {
            dgMensajes.ClearSelection();
        }
        #endregion
    }
}
